Skip to content

Extend validate_bootloader_layout with UEFI-dependent checks#4474

Merged
svartkanin merged 3 commits intoarchlinux:masterfrom
Softer:extend-bootloader-layout-validation
Apr 26, 2026
Merged

Extend validate_bootloader_layout with UEFI-dependent checks#4474
svartkanin merged 3 commits intoarchlinux:masterfrom
Softer:extend-bootloader-layout-validation

Conversation

@Softer
Copy link
Copy Markdown
Contributor

@Softer Softer commented Apr 24, 2026

Follow-up to #4442. The validator introduced there covered two Limine-specific layout cases; everything else that makes a config unbootable still lived in GlobalMenu._validate_bootloader, which meant the silent / --config path through guided.py and the safety-net call inside Installer._add_limine_bootloader never saw those checks.

This PR grows validate_bootloader_layout with a is_uefi parameter and three checks that were missing or menu-only:

  • Systemd-boot / Efistub / rEFInd on a BIOS system - none of them boot without UEFI. Previously only the rEFInd case was caught, and only in the TUI.
  • Efistub with a non-FAT boot partition - the UEFI firmware reads the kernel directly from that partition, so it must be FAT.
  • The rEFInd UEFI-only guard moves from GlobalMenu._validate_bootloader into the util, so all three call sites share it.

GlobalMenu, guided.py and Installer._add_limine_bootloader now pass SysInfo.has_uefi() as the third argument. No changes to what currently valid configs look like.

Tested in QEMU against 7 scenarios (BIOS and UEFI, happy paths and every new failure branch) - all behave as expected.

Add is_uefi parameter and three new validations: Systemd-boot, Efistub
and rEFInd require UEFI; Efistub additionally requires a FAT boot
partition. Move the rEFInd UEFI-only check out of GlobalMenu so
guided.py and Installer silent-install paths get the same coverage.
@Softer Softer requested a review from Torxed as a code owner April 24, 2026 11:27
Comment thread archinstall/lib/bootloader/utils.py Outdated
Comment thread archinstall/scripts/guided.py Outdated
Softer added 2 commits April 26, 2026 11:46
Replace module-level _UEFI_ONLY_BOOTLOADERS tuple with an
is_uefi_only() method on the Bootloader enum, mirroring the
existing has_uki_support() / has_removable_support() pattern.
The UEFI flag is a constant system fact for the run, so the
validator retrieves it via SysInfo.has_uefi() directly instead
of having every caller pass it in. Updates all three call sites
in global_menu.py, installer.py and guided.py, and removes the
now-unused SysInfo import from guided.py.
@Softer
Copy link
Copy Markdown
Contributor Author

Softer commented Apr 26, 2026

Thanks, agreed.

@svartkanin svartkanin merged commit d836ab0 into archlinux:master Apr 26, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants